package jsu.hx.lost.Service;

import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.beans.factory.annotation.Value;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Service // 标记为 Spring 服务类
public class FileService {

    // 从配置文件中读取文件上传目录
    @Value("${spring.servlet.multipart.location}")
    private String uploadDir; //文件上传目录

    /**
     * 保存上传的文件
     * @param files 上传的文件数组
     * @return 返回上传成功的文件名列表
     * @throws IOException 上传过程中的异常
     */
    public List<String> saveFiles(MultipartFile[] files) throws IOException {
        List<String> fileNames = new ArrayList<>(); // 用于存储所有上传文件的文件名

        for (MultipartFile file : files) {
            // 获取原始文件名
            String originalFilename = file.getOriginalFilename();
            if (originalFilename == null) {
                throw new IOException("文件没有找到！");
            }

            // 生成唯一的文件名
            String fileExtension = StringUtils.getFilenameExtension(originalFilename);// 获取文件扩展名
            String uniqueFileName = UUID.randomUUID().toString() + "." + fileExtension;// 使用 UUID 生成唯一文件名

            // 创建文件保存的路径
            Path path = Paths.get(uploadDir, uniqueFileName);
            Files.createDirectories(path.getParent());  // 如果目录不存在，则创建

            // 将文件保存到目标路径
            file.transferTo(path);

            // 将文件名添加到返回列表中
            fileNames.add(uniqueFileName);
        }

        return fileNames;  // 返回所有上传文件的文件名
    }
}
